package main

import (
	"fmt"
	"os"
	"unsafe"
)

/* 这个小demo针对文件操作，从文件中读取struct，然后又将strcut写入文件中 */

func DemoStructAndFile() {
	t := Test{
		F1: 0x1234,
		F2: 0x4567,
		F3: 12,
	}

	buf := struct2Bytes(unsafe.Pointer(&t), 16)

	fmt.Println("struct -> []byte :", buf)

	// 将[]byte写入文件
	file, err := os.OpenFile("1.txt", os.O_RDWR|os.O_CREATE, 0666)
	if nil != err {
		fmt.Println("打开/创建文件失败：", err)
		return
	}
	defer file.Close()

	_, err = file.Write(buf)
	if nil != err {
		fmt.Println("写入文件失败：", err)
		return
	}

	fmt.Println("[]byte写入文件成功！")

	// 读取文件
	ts := Test{}
	tsBytes := struct2Bytes(unsafe.Pointer(&ts), 16) // 得到一片内存空间——[]byte
	_, err = file.ReadAt(tsBytes, 0)
	if nil != err {
		fmt.Println("从文件中读取[]byte失败：", err)
		return
	}

	fmt.Println("文件读取成功！")
	fmt.Println("[]byte -> test :", ts)
}
